Traditional microprocessors are singles-threaded in nature, thereby executing only one thread of execution at a time. The sequence in which instructions are executed in such conventional microprocessors is dictated by the program that includes the instructions. Absent instructions that modify the path of execution of a program, such as branch instructions, instructions are generally executed sequentially. Traditional microprocessors include a program counter that points to the instruction that is to be executed. Generally, the instruction pointer is incremented by a set amount, such as by one, after completion of execution of an instruction to point to the next instruction in a program sequence.
If a microprocessor, however, executes multiple threads concurrently, synchronization issues between threads may arise. In a situation in which both threads are sharing system resources, a change implemented by a first thread may detrimentally effect instruction processing in a second thread. For example, if a first running thread were to switch memory translation context, the second running thread must be made aware of such a change to prevent processing errors. In a multithreaded environment such as this, especially in view of increased instruction processing speeds, the synchronization between threads becomes difficult.